import { Column, Entity, PrimaryGeneratedColumn, OneToMany } from 'typeorm';
import { RoleAccessEntity } from './role_access.entity';

/*
1、模块名称: 模块名称就是左侧的主菜单名称，如果增加数据的时候是模块，那么需要指定节点类型是模块，并且选择所属模块为顶级模块
2、节点类型： 1、表示模块   2、表示菜单   3、操作
3、操作名称:如果节点类型是菜单，那么操作名称就是左侧菜单的名称。如果节点类型是操作，那么操作名称就是具体的操作名称
4、操作地址：用户实际访问的地址
5、所属模块：模块（顶级模块）  菜单和操作（父亲模块）
*/

@Entity('access')
export class AccessEntity {
  @PrimaryGeneratedColumn({
    type: 'int',
    name: 'id',
    comment: '主键id',
  })
  id: number;

  @Column('varchar', {
    nullable: false,
    primary: true,
    length: 50,
    name: 'uuid',
    generated: 'uuid',
    comment: 'uuid',
  })
  uuid: string;

  @Column('varchar', {
    nullable: true,
    unique: true,
    length: 50,
    name: 'moduleName', //模块名称
    comment: '模块名称',
  })
  moduleName: string | null;

  @Column('enum', {
    nullable: true,
    enum: ['1', '2', '3'],//节点类型 :  1、表示模块顶级模块   2、表示菜单   3、操作
    name: 'type',
    comment: '类型',
  })
  type: string | null;

  @Column('varchar', {
    nullable: true,
    length: 100,
    name: 'actionName',//操作名称根据上面type来变化的
    comment: '操作名称',
  })
  actionName: string | null;

  @Column('varchar', {
    nullable: true,
    length: 100,
    name: 'icon',
    comment: '图标',
  })
  icon: string | null;

  @Column('varchar', {
    nullable: true,
    length: 100,
    name: 'path',
    comment: 'url地址',
  })
  path: string | null;

  @Column('int', {
    nullable: false,
    default: 0,
    name: 'pid',
    comment: '上级模块id， 0 代表顶级模块',
  })
  pid: number;

  @Column('int', {
    nullable: false,
    default: () => 1,
    name: 'sort',
    comment: '排序',
  })
  sort: number;

  @Column('varchar', {
    nullable: true,
    length: 100,
    name: 'platform',
    comment: '平台',
  })
  platform: string | null;

  @Column('enum', {
    nullable: true,
    default: 1,
    name: 'status',
    enum: [0, 1],
    comment: '状态==>0 隐藏   1 显示',
  })
  status: number | null;

  @Column('timestamp', {
    nullable: false,
    default: () => 'CURRENT_TIMESTAMP',
    name: 'createdAt',
    comment: '创建时间',
  })
  createdAt: Date;

  @Column('timestamp', {
    nullable: false,
    default: () => 'CURRENT_TIMESTAMP',
    name: 'updatedAt',
    comment: '最后更新时间',
  })
  updatedAt: Date;
}
